#include <vector>

using namespace std;

// Queue 是一个表示队列的类型
// Queue 是一个支持让整数进行排队的结构
// 如果我们需要让 string 进行排队？ => vector 是如何做到包含任意类型元素的数组的？
// vector<int> / vector<double> / vector<string>
// Queue<int> / Queue<double> / Queue<string> - 模板类 <模板参数>
template <typename T> // T - 是一个表示任意类型的模板参数
class Queue {
private:
  int size;
  vector<T> numbers;

public:
  // 默认构造函数
  Queue() {
    cout << "A queue is created." << endl;
    size = 0;
    numbers = {};
  }
  // 析构函数
  ~Queue() {
    cout << "A queue is destroyed." << endl;
  }

  void enqueue(T n) {
    ++size;
    numbers.push_back(n);
  }

  T top() {
    if (numbers.empty()) {
      return T();
    }

    return numbers[0];
  }

  void dequeue() {
    if (numbers.empty() == false) {
      --size;
      numbers.erase(numbers.begin());
    }
  }
};